iBATIS (বর্তমানে MyBatis নামে পরিচিত) SQL কোডে dynamic SQL ব্যবহারের জন্য বিভিন্ন ট্যাগ প্রদান করে। এগুলি আপনাকে SQL কোয়েরি ডাইনামিকভাবে তৈরি করতে সহায়তা করে, যেখানে আপনি কন্ডিশনাল স্টেটমেন্ট, লিস্ট প্রসেসিং, এবং অন্যান্য ডাইনামিক ফিল্টারিং কার্যকরভাবে ব্যবহার করতে পারেন। এই ট্যাগগুলি হল:
<if>: কন্ডিশনাল লজিক তৈরি করার জন্য ব্যবহার করা হয়।<choose>:if-elseলজিকের জন্য ব্যবহৃত হয়, যেখানে একটি শর্ত মেলালে পরবর্তী শর্তগুলোর পরীক্ষা হয় না।<foreach>: একটি লিস্ট বা অ্যারে থেকে একাধিক মানের সাথেINকন্ডিশন তৈরি করতে ব্যবহৃত হয়।<where>: SQLWHEREক্লজ তৈরিতে ব্যবহৃত হয়, যেখানে স্বয়ংক্রিয়ভাবেANDযোগ করা হয়।
এখানে এই ট্যাগগুলির বিস্তারিত ব্যবহার এবং উদাহরণ দেওয়া হলো।
1. IF Tag
<if> ট্যাগটি SQL কোডে একটি শর্ত নির্ধারণ করার জন্য ব্যবহৃত হয়। যখন একটি কন্ডিশন মেট হবে, তখন সেই অংশ SQL কোয়েরিতে অন্তর্ভুক্ত হবে।
Example: Using <if> for Conditional SQL
<select id="getEmployeeByConditions" resultType="Employee">
SELECT * FROM employees
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="email != null">
AND email = #{email}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
Explanation:
<if test="name != null">: যদিnameপ্যারামিটারটিnullনা হয়, তবেAND name = #{name}এই SQL শর্তটি কুয়েরিতে যোগ হবে।<where>:whereব্লকটিANDশর্ত যোগ করার ক্ষেত্রে অতিরিক্তANDযোগ করা এড়ায়, যাতে অপ্রয়োজনীয়ANDকন্ডিশন না থাকে।
Usage:
Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("email", "john@example.com");
List<Employee> employees = sqlSession.selectList("getEmployeeByConditions", params);
2. CHOOSE Tag
<choose> ট্যাগটি if-else লজিকের মতো কাজ করে, যেখানে আপনি একাধিক শর্তের মধ্যে প্রথম সত্য শর্তটি নির্বাচন করতে পারেন।
Example: Using <choose> for Conditional SQL
<select id="getEmployeeByType" resultType="Employee">
SELECT * FROM employees
<where>
<choose>
<when test="status == 'active'">
AND status = 'active'
</when>
<when test="status == 'inactive'">
AND status = 'inactive'
</when>
<otherwise>
AND status IS NULL
</otherwise>
</choose>
</where>
</select>
Explanation:
<choose>: এটি একটি if-else ব্লকের মতো কাজ করে, যেখানে<when>এবং<otherwise>অংশ রয়েছে।<when>: প্রথম সত্য শর্ত মেললেই পরবর্তী শর্তগুলো পরীক্ষা করা হয় না।<otherwise>: সব শর্ত ভুল হলে এই অংশটি কার্যকর হয়।
Usage:
Map<String, String> params = new HashMap<>();
params.put("status", "active");
List<Employee> employees = sqlSession.selectList("getEmployeeByType", params);
3. FOREACH Tag
<foreach> ট্যাগটি একটি লিস্ট বা অ্যারের মাধ্যমে একাধিক মান নিয়ে IN কন্ডিশন তৈরি করার জন্য ব্যবহৃত হয়। এটি ডাইনামিকভাবে ইনপুট মানগুলিকে একটি SQL কোয়েরির অংশে যোগ করে।
Example: Using <foreach> for IN Clause
<select id="getEmployeesByIds" resultType="Employee">
SELECT * FROM employees
WHERE id IN
<foreach item="id" collection="ids" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
Explanation:
<foreach>: এটি একটি লুপের মতো কাজ করে এবংidsলিস্টের প্রতিটি উপাদানকেINকন্ডিশনে যোগ করে।open="("এবংclose=")": এটি SQL কোয়েরিরINক্লজে()যোগ করে।separator=",": এটি লিস্টের মধ্যে কমা যোগ করে।
Usage:
List<Integer> ids = Arrays.asList(1, 2, 3, 4);
Map<String, Object> params = new HashMap<>();
params.put("ids", ids);
List<Employee> employees = sqlSession.selectList("getEmployeesByIds", params);
4. WHERE Tag
<where> ট্যাগটি WHERE ক্লজে ডাইনামিক শর্ত যোগ করার জন্য ব্যবহৃত হয়। এটি স্বয়ংক্রিয়ভাবে AND বা OR যোগ করে এবং প্রয়োজনে অতিরিক্ত শর্তও বাদ দেয়।
Example: Using <where> for SQL Conditions
<select id="getEmployeesByConditions" resultType="Employee">
SELECT * FROM employees
<where>
<if test="name != null">AND name = #{name}</if>
<if test="age != null">AND age = #{age}</if>
<if test="email != null">AND email = #{email}</if>
</where>
</select>
Explanation:
<where>: এটি একটি SQL কুয়েরির মধ্যেWHEREক্লজ তৈরি করে এবং শর্তগুলোANDদিয়ে যুক্ত হয়।<if>: যদি কোনো শর্ত থাকে, তবে সেটি SQL কুয়েরিতে যোগ হবে, অন্যথায় তা বাদ যাবে।
Usage:
Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("age", 30);
List<Employee> employees = sqlSession.selectList("getEmployeesByConditions", params);
Combining All Tags in a Single Query
আপনি সমস্ত ডাইনামিক SQL ট্যাগ ব্যবহার করে একটি জটিল কুয়েরি তৈরি করতে পারেন।
Example: Combining IF, CHOOSE, FOREACH, and WHERE
<select id="getEmployeesByComplexConditions" resultType="Employee">
SELECT * FROM employees
<where>
<if test="name != null">AND name = #{name}</if>
<if test="age != null">AND age = #{age}</if>
<choose>
<when test="status == 'active'">
AND status = 'active'
</when>
<when test="status == 'inactive'">
AND status = 'inactive'
</when>
<otherwise>
AND status IS NULL
</otherwise>
</choose>
<if test="ids != null and ids.size() > 0">
AND id IN
<foreach item="id" collection="ids" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
</select>
Explanation:
<if>: ডাইনামিক কন্ডিশনাল শর্ত যোগ করতে ব্যবহৃত হয়।<choose>:statusএর জন্যif-elseলজিক প্রয়োগ করা হয়।<foreach>: একাধিক আইডি দিয়েINকন্ডিশন তৈরি করা হয়।
iBATIS (MyBatis) এর Dynamic SQL ট্যাগগুলো SQL কোয়েরি তৈরি করার ক্ষেত্রে খুবই কার্যকরী। আপনি <if>, <choose>, <foreach>, এবং <where> ব্যবহার করে কোয়েরি কোডকে আরও ফ্লেক্সিবল এবং ডাইনামিক করে তুলতে পারেন, যা অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সাহায্য করে।
<if>: কন্ডিশনাল শর্ত যোগ করতে ব্যবহৃত হয়।<choose>:if-elseশর্ত তৈরির জন্য ব্যবহৃত হয়।<foreach>: একাধিক মান দিয়েINকন্ডিশন তৈরি করার জন্য ব্যবহৃত হয়।<where>:WHEREক্লজ তৈরি করার জন্য ব্যবহৃত হয়, যাতে অপ্রয়োজনীয়ANDবাদ যায়।
এই ট্যাগগুলির সাহায্যে MyBatis-এ SQL কোড আরও শক্তিশালী এবং কার্যকরী করা সম্ভব।
Read more